home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-12-29 | 6.2 KB | 186 lines | [TEXT/EMAC] |
- ;;;
- ;;; Code to send Apple events to Textures
- ;;; Copyright (C) 1993 Marc Parmet. All rights reserved.
- ;;;
- ;;; Put an alias to Textures called "Textures" in the etc folder
- ;;; of Emacs to enable launches.
- ;;;
-
- (require 'mac-runtime "mac/runtime")
-
- (defvar textures:switch t "Set to non-nil to have Emacs bring Textures to the front after sending it an Apple event.")
-
- (defmacro textures:create-apple-event (eventClass eventID event transactionID)
- (list 'ae-create-apple-event "*TEX" eventClass eventID event transactionID))
-
- (defun textures:launch ()
- "Launch Textures. There should be an alias to Textures in ~/etc."
- (launch-application "Textures"))
-
- (defun textures:send-event-internal (event)
- (let ((reply (make-string sizeof-AppleEvent 0)))
- (AESend event reply (+ kAEQueueReply kAENeverInteract) kAENormalPriority 0 0 0)))
-
- (defun textures:need-alias-message ()
- (message "Put an alias to Textures named “Textures” in the etc folder of Emacs."))
-
- (defun textures:send-event (event)
- (let ((err (textures:send-event-internal event)))
- (cond
- ((= err noErr)
- (if textures:switch
- (textures:launch))
- noErr)
- ((= err connectionInvalid)
- (if (y-or-n-p "Textures is not running. Try to launch? ")
- (let ((launch-err (textures:launch)))
- (cond
- ((= launch-err fnfErr)
- (textures:need-alias-message)
- noErr)
- (t
- (sleep-for 5) ;;; Let the Finder do the launch before resending
- (let ((err (textures:send-event-internal event)))
- (if (= err connectionInvalid)
- (progn
- (message "Couldn't launch Textures")
- noErr)
- err)))))
- noErr))
- (t
- err))))
-
- (defun textures:open-or-print-file (file command)
- (let* (event
- transactionID
- (result
- (catch 'bailout
- (catch-err (textures:create-apple-event kCoreEventClass command
- event transactionID))
- (catch-err (unix-filename-to-FSSpec file spec))
- (catch-err (AEPutParamPtr event keyDirectObject typeFSS spec (length spec)))
- (setq ae-history (cons (cons transactionID
- (list
- (cons 'description
- (concat
- (if (equal command kAEOpenDocuments)
- "textures-open "
- "textures-print ")
- file))
- (cons 'handler 'do-simple-reply)))
- ae-history))
- (catch-err (textures:send-event event))
- noErr)))
- (if event (AEDisposeDesc event))
- result))
-
- (defun textures:open-file (file)
- "Send an open-document event to Textures."
- (textures:open-or-print-file file kAEOpenDocuments))
-
- (defun textures:print-file (file)
- "Send an print-document event to Textures."
- (textures:open-or-print-file file kAEPrintDocuments))
-
- (defun textures:typeset-text (text)
- "Send the given string to Textures to be typeset."
- (let* (event
- transactionID
- (result
- (catch 'bailout
- (catch-err (textures:create-apple-event kAEMiscStandards kAEDoScript
- event transactionID))
- (catch-err (AEPutParamPtr event keyDirectObject typeChar
- text (length text)))
- (setq ae-history (cons (cons transactionID
- (list
- (cons 'description "typeset-text")
- (cons 'handler 'do-simple-reply)))
- ae-history))
- (catch-err (textures:send-event event))
- noErr)))
- (if event (AEDisposeDesc event))
- result))
-
- (defun textures:typeset-file (file)
- "Send the given filename to Textures to be typeset."
- (let* (event
- spec
- transactionID
- (result
- (catch 'bailout
- (catch-err (textures:create-apple-event kAEMiscStandards kAEDoScript
- event transactionID))
- (catch-err (unix-filename-to-FSSpec file spec))
- (catch-err (AEPutParamPtr event keyDirectObject typeFSS spec
- (length spec)))
- (setq ae-history (cons (cons transactionID
- (list
- (cons 'description (concat "typeset-file " file))
- (cons 'handler 'do-simple-reply)))
- ae-history))
- (catch-err (textures:send-event event))
- noErr)))
- (if event (AEDisposeDesc event))
- result))
-
- (defun textures:menu-open-or-print-file (command)
- (let ((file (call-interactively (function (lambda (x)
- (interactive "fFile to open: ") x)))))
- (if file
- (let ((err (textures:open-or-print-file file command)))
- (if err (report-error-in-message-line err))))))
-
- (defun textures:menu-open-file (menu item)
- (textures:menu-open-or-print-file kAEOpenDocuments))
-
- (defun textures:menu-print-file (menu item)
- (textures:menu-open-or-print-file kAEPrintDocuments))
-
- (defun textures:menu-typeset-buffer (menu item)
- (if (and (not (eq major-mode 'plain-tex-mode))
- (not (eq major-mode 'latex-mode)))
- (tex-mode))
- (TeX-buffer))
-
- (defun textures:menu-typeset-region (menu item)
- (TeX-region (point) (mark)))
-
- (defun textures:menu-typeset-file (menu item)
- (let* ((file (call-interactively (function (lambda (x)
- (interactive "fFile to typeset: ")
- x))))
- (err (textures:typeset-file (expand-file-name file))))
- (report-error-in-message-line err)))
-
- (defun textures:menu-launch (menu item)
- (let ((err (textures:launch)))
- (if (= err fnfErr)
- (textures:need-alias-message)
- (report-error-in-message-line err))))
-
- (defun textures:menu-switch (menu item)
- (setq textures:switch (not textures:switch))
- (CheckItem textures:menu 5 (if textures:switch 1 0))
- (if (and textures:switch (not (file-exists-p "/bin/Textures")))
- (textures:need-alias-message)))
-
- (defvar textures:have-menu nil)
-
- (if (not textures:have-menu)
- (progn
- (defvar textures:menu (NewMenu 136 "Typeset"))
- (AppendMenu textures:menu "Launch Textures" 'textures:menu-launch)
- (AppendMenu textures:menu "Open file in Textures..." 'textures:menu-open-file)
- (AppendMenu textures:menu "Print file in Textures..." 'textures:menu-print-file)
- (AppendMenu textures:menu "(-" nil)
- (AppendMenu textures:menu "Switch after sending command" 'textures:menu-switch)
- (AppendMenu textures:menu "(-" nil)
- (AppendMenu textures:menu "Typeset file..." 'textures:menu-typeset-file)
- (AppendMenu textures:menu "Typeset buffer/T" 'textures:menu-typeset-buffer)
- (AppendMenu textures:menu "Typeset region" 'textures:menu-typeset-region)
- (InsertMenu textures:menu 0)
- (CheckItem textures:menu 5 textures:switch)
- (DrawMenuBar)
- (setq textures:have-menu t)))
-